home *** CD-ROM | disk | FTP | other *** search
- # Text editing widget
-
- # NB: this always assumes fixed bounds.
- # For auto-growing TextEdit windows, different code would be needed.
-
- from stdwinevents import *
-
- class TextEdit:
- #
- def create(self, parent, (cols, rows)):
- parent.addchild(self)
- self.parent = parent
- self.cols = cols
- self.rows = rows
- self.text = ''
- # Creation of the editor is done in realize()
- self.editor = None
- self.dh = self.dv = 0
- return self
- #
- def createboxed(self, parent, (cols, rows), (dh, dv)):
- self = self.create(parent, (cols, rows))
- self.dh = max(0, dh)
- self.dv = max(0, dv)
- return self
- #
- def settext(self, text):
- self.editor.settext(text)
- #
- def gettext(self):
- return self.editor.gettext(text)
- #
- # Downcalls from parent to child
- #
- def destroy(self):
- del self.parent
- del self.editor
- del self.window
- #
- def getminsize(self, m, (width, height)):
- width = max(0, width - 2*self.dh)
- height = max(0, height - 2*self.dv)
- if width > 0 and self.editor:
- (left, top), (right, bottom) = self.editor.getrect()
- act_width, act_height = right - left, bottom - top
- if width >= act_width:
- width = width + 2*self.dh
- height = max(height, act_height) + 2*self.dv
- return width, height
- width = max(width, self.cols*m.textwidth('in')/2) + 2*self.dh
- height = max(height, self.rows*m.lineheight()) + 2*self.dv
- return width, height
- #
- def setbounds(self, bounds):
- self.bounds = bounds
- if self.editor:
- (left, top), (right, bottom) = bounds
- left = left + self.dh
- top = top + self.dv
- right = right - self.dh
- bottom = bottom - self.dv
- self.editor.move((left, top), (right, bottom))
- if self.dh and self.dv:
- (left, top), (right, bottom) = bounds
- left = left + 1
- top = top + 1
- right = right - 1
- bottom = bottom - 1
- bounds = (left, top), (right, bottom)
- self.editor.setview(bounds)
- #
- def getbounds(self):
- return self.bounds
- #
- def realize(self):
- self.window = self.parent.getwindow()
- (left, top), (right, bottom) = self.bounds
- left = left + self.dh
- top = top + self.dv
- right = right - self.dh
- bottom = bottom - self.dv
- self.editor = \
- self.window.textcreate((left, top), (right, bottom))
- self.editor.setactive(0)
- bounds = self.bounds
- if self.dh and self.dv:
- (left, top), (right, bottom) = bounds
- left = left + 1
- top = top + 1
- right = right - 1
- bottom = bottom - 1
- bounds = (left, top), (right, bottom)
- self.editor.setview(bounds)
- self.editor.settext(self.text)
- self.parent.need_mouse(self)
- self.parent.need_keybd(self)
- self.parent.need_altdraw(self)
- #
- def draw(self, d, area):
- if self.dh and self.dv:
- d.box(self.bounds)
- #
- def altdraw(self, area):
- self.editor.draw(area)
- #
- # Event downcalls
- #
- def mouse_down(self, detail):
- x = self.editor.event(WE_MOUSE_DOWN, self.window, detail)
- #
- def mouse_move(self, detail):
- x = self.editor.event(WE_MOUSE_MOVE, self.window, detail)
- #
- def mouse_up(self, detail):
- x = self.editor.event(WE_MOUSE_UP, self.window, detail)
- #
- def keybd(self, type, detail):
- x = self.editor.event(type, self.window, detail)
- #
- def activate(self):
- self.editor.setfocus(0, 30000)
- self.editor.setactive(1)
- #
- def deactivate(self):
- self.editor.setactive(0)
- #
-